#include<stdio.h>
/*
 * 冒泡排序可以按升序和降序，使用函数指针封装这种变化
 */

int asc(int x, int y){
	return x>y;
}

int desc(int x, int y){
	return x<y;
}

/*
 * 参数1：待排序的数组，
 * 参数2：数组的长度
 * 参数3：函数指针(返回值为int,2个参数也分别为int类型)
 */
void sort(int arr[], int len, int(*func)(int, int)){
	for(int i=0; i<len-1; i++){
		int flag = 0;	//用于记录本次内循环是否有元素交换发生
		for(int j=0; j<len-1-i; j++){
			if(func(arr[j],arr[j+1])){
				flag = 1;	
				int temp = arr[j];
				arr[j] = arr[j+1];
				arr[j+1] = temp;
			}
		}
		//如果本次内循环无元素交换发生，则表示整个数组已经是有序的状态了。
		if(!flag){
			break;
		}
	}
}


int main()
{
	int arr[10] = {4,2,6,4,9,3,8,10,7,12};
	sort(arr,5,asc);
	sort((arr+5),5,desc);
	for(int i=0; i<10; i++){
		printf("%d\t",arr[i]);
	}
	return 0;
}
